Vorverarbeitung von großen G-Code Dateien
Das Beispielprojekt CNC15_LargeGCode.project finden Sie im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples.
Das Beispielprojekt zeigt, wie große G-Code-Dateien verarbeitet werden können. Da sehr große Dateien insbesondere als Ausgabe von CAD/CAM-Systemen vorkommen, wird dieser Fall beispielhaft gezeigt.
CAD/CAM-Systeme erzeugen oftmals G-Code-Dateien mit mehreren hunderttausend Zeilen. Diese bestehen aus sehr kurzen Geradenabschnitten (G1), typischerweise in der Größenordnung von 100 Mikrometern bis zu einem Millimeter. Diese kurzen Geradenabschnitte tasten die Kontur des Werkstücks ab. Sie bilden keine glatte Bahn, zwischen den Geradenabschnitten springt in der Regel die Tangente.
Das Beispiel zeigt, wie solch große Dateien effizient und mit konstantem Speicherbedarf eingelesen werden können und wie ein glatter Geschwindigkeitsverlauf auf einer Bahn erreicht werden kann, die aus so vielen kurzen Geradenabschnitten besteht. Die Originalkontur des Werkstücks wird während der Vorverarbeitung des G-Codes rekonstruiert.
Aufbau der Applikation
Der Aufbau ist für CNC-Applikationen typisch. In der Hintergrund-Task (PathTask) wird der G-Code eingelesen, hier findet auch die Bahnvorverarbeitung statt. In der Bustask (MainTask) wird die Interpolation ausgeführt.
Einlesen großer Dateien
Damit die Latenz zu Beginn der Verarbeitung des G-Codes kurz ist, wird eine Schleife in der Hintergrundtask verwendet. Als Abbruchbedingung wird der Einfachheit halber ein Zähler verwendet. Je nach Applikation, G-Code und Leistungsfähigkeit der SPS können hier andere Abbruchbedingungen wie beispielsweise ein Timer sinnvoll sein. Die Schleife wird vor Erreichen dieser Abbruchbedingung beendet, wenn die Path-Queue gefüllt ist.
// Set this value depending on your other tasks, PLC performance, and G-Code counter := 25; WHILE counter > 0 AND (poqDataOut = 0 OR_ELSE (NOT poqDataOut^.bFull AND NOT poqDataOut^.bEndOfList)) DO <Read G-Code and process it> counter := counter - 1; END_WHILE
Durch das Pipelining bei der Vorverarbeitung können auch sehr große G-Code-Dateien mit kleinem, konstantem Speicherbedarf eingelesen werden. Die Queue-Größen sind lediglich so groß gewählt, dass die jeweiligen Bausteine ausreichend große Vorausschau haben.
Die Ausgangsqueue des SMC_NCInterpreters ist zugleich die Eingangsqueue von SMC_SmoothMerge . Für die Ausgangsqueue werden 128+3 Elemente reserviert. 3 ist eine Reserve der SMC_OutQueue, 128 bleiben zur Verwendung als Vorausschau für SMC_SmoothMerge. SMC_SmoothMerge fasst maximal 128 kurze Geradenabschnitte zu einem Spline zusammen.
Die Ausgangsqueue von SMC_SmoothMerge ist zugleich die Eingangsqueue von SMC_SmoothPath. SMC_SmoothPath benötigt als Vorausschau mindestens 2 Elemente, dazu noch eine Reserve von 3 Elementen. Wenn M-Funktionen zwischen zwei verschliffenen Elementen stehen, dann werden entsprechend der Anzahl der M-Funktionen mehr Elemente benötigt.
Die Ausgangsqueue von SMC_SmoothMerge ist zugleich die Eingangsqueue des SMC_Interpolators. Eine Vorausschau von 100 Elementen ist für die meisten Applikationen geeignet. Für weitere Informationen siehe Bahnvorverarbeitung und Queue-Größen.
/// Buffer of the interpreter, lookahead for SMC_SmoothMerge aBufIp : ARRAY[0..130] OF SMC_GeoInfo; /// Buffer of SMC_SmoothMerge aBufSmm : ARRAY[0..15] OF SMC_GeoInfo; /// Buffer of SMC_SmoothPath, lookahead for SMC_Interpolator aBufSmp : ARRAY[0..99] OF SMC_GeoInfo;
Vorverarbeitung der Geradenabschnitte
Der Baustein SMC_SmoothMerge sorgt für einen glatten Geschwindigkeitsverlauf auf den vielen sehr kurzen Geradenabschnitten. Er fasst möglichst viele aufeinanderfolgende Geradenabschnitte zu einem Spline zusammen, unter Einhaltung von vorgegebenen Toleranzen. Im Beispiel wird eine maximale Abweichung von 0.1 mm in X und Y erlaubt (PARAMETERS.piMaxDifference).
Einlesen der kurzen Geradenabschnitte

Zusammenfassen mehrerer Geradenabschnitte zu Splines mit
SMC_SmoothMerge.
Verschleifen zwischen den Splines mit
SMC_SmoothPath, da die Splines wie oben ersichtlich nicht tangential aneinander anschließen.
Inbetriebnahme
Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.
Öffnen Sie den Trace und laden Sie ihn auf die Steuerung.
Starten Sie die Applikation.
Sie können die Abarbeitung des G-Codes im Trace nachvollziehen.